package edu.fatec.dbimpl;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.imageio.ImageIO;

import edu.fatec.produto.Categoria;
import edu.fatec.produto.Produto;

public class ProdutoDB {

	public Connection getConnection() throws ClassNotFoundException, SQLException { 
		Class.forName("com.mysql.jdbc.Driver");
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/loja2", "root", "root");
		return con;
	}

	public void inserir( Produto p ) throws ClassNotFoundException, SQLException, IOException { 

		Connection con = getConnection();
		String sql = "INSERT INTO produtos (" +
				"id, nome, descricao, foto, preco, " +
				"unidMedida, medida, categoria, " +
				"cidade, estado, paisOrigem) values (" +
				"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?" +
				")";
		PreparedStatement sqlStat = con.prepareStatement(sql);
		int campo = 1;
		sqlStat.setLong(campo++, p.getId());
		sqlStat.setString(campo++, p.getNome());
		sqlStat.setString(campo++, p.getDescricao());

		ByteArrayOutputStream baos = new ByteArrayOutputStream(); // Criar Array de Bytes
		ImageIO.write(p.getFoto(), "png", baos);
		InputStream is = new ByteArrayInputStream(baos.toByteArray()); // Pega o InputStream do Byte Array
		sqlStat.setBinaryStream(campo++, is);

		sqlStat.setDouble(campo++, p.getPreco());
		sqlStat.setString(campo++, p.getUnidMedida());
		sqlStat.setDouble(campo++, p.getMedida());
		sqlStat.setLong(campo++, p.getCategoria().getId());
		sqlStat.setString(campo++, p.getCidade());
		sqlStat.setString(campo++, p.getEstado());
		sqlStat.setString(campo++, p.getPaisOrigem());

		sqlStat.executeUpdate();
	}

	public Produto pesquisar(long id) throws ClassNotFoundException, SQLException, IOException { 
		Connection con = getConnection();
		String sql = "SELECT * from produtos where id = ?";
		PreparedStatement sqlStat = con.prepareStatement(sql);
		sqlStat.setLong(1, id);
		ResultSet rs = sqlStat.executeQuery();
		Produto p = null;
		if (rs.next()) { 

			p = new Produto();
			p.setId( rs.getLong("id") );
			p.setNome( rs.getString("nome") );
			p.setDescricao( rs.getString("descricao") );

			BufferedImage foto = ImageIO.read( rs.getBinaryStream("foto") );
			p.setFoto( foto );

			p.setPreco( rs.getDouble("preco") );
			p.setUnidMedida( rs.getString("unidMedida") );
			p.setMedida( rs.getLong("medida") );

			Categoria cat = new Categoria();
			cat.setId( rs.getLong("categoria") );

			p.setCategoria( cat );
			p.setCidade( rs.getString("cidade") );
			p.setEstado( rs.getString("estado") );
			p.setPaisOrigem( rs.getString("paisOrigem") );
		}
		return p;
	}

}
